//接口地址匹配测试环境
function _urlMatching(url){

    var urlString = window.location.href;
    //接口匹配环境
    if(url.toString().indexOf('http://') == -1 && url.toString().indexOf('https://') == -1){

        if(urlString.indexOf('https://') != -1){
            if(urlString.indexOf('52tt.com/gray/') != -1){
                return 'https://gray.52tt.com' + url;
            }
            else if(urlString.indexOf('52tt.com') != -1){
                return 'https://api.52tt.com' + url;
            }
            else {
                return 'http://192.168.9.230:8089' + url;
            }
        }else {
            if(urlString.indexOf('52tt.com/gray/') != -1){
                return 'http://gray.52tt.com' + url;
            }
            else if(urlString.indexOf('52tt.com') != -1){
                return 'http://api.52tt.com' + url;
            }
            else {
                return 'http://192.168.9.230:8089' + url;
            }
        }

    }else {
        return url
    }
}

//方法: 从URL获取参数
function _getCurrentUrlParam(){
    var urlString = window.location.href;
    var extendParameter = $$.parseUrlQuery(urlString);
    //过滤参数里的hash #
    extendParameter = _.mapObject(extendParameter, function(val, key) {
        if(val.toString().indexOf('#') != -1){
            return val.toString().substr(0, val.toString().indexOf('#'));
        }else {
            return val;
        }
    });

    return extendParameter;
}


//获取当前项目的共享数据: return false or Object (如果有共享数据)
myApp.getProjectShareData = function(){

    //内存共享数据结构:
    //var shareData = {
    //     data:[
    //         //示例数据: 公会体系
    //         {
    //             uri:'http://app.52tt.com/gray/guild/index.html',
    //             //请求参数
    //             param : {
    //                 pageName:'',//跳转入口页面
    //                 gift_id:0, //商品详情id
    //                 kind:0,//礼包类型（0 非礼包中心礼包，1 礼包中心 TT礼包，2 礼包中心 公会礼包）
    //             },
    //             //共享数据区域
    //             share : {
    //                 //示例:星级图标数组
    //                 guildStarIcons:[
    //                     {
    //                         level:0,
    //                         icon:'',
    //                     }
    //                 ],
    //             }
    //         },
    //     ],
    //     DeviceInfo:{
    //         deviceId:'8648512455',
    //         osType:'Android',
    //         osVersion:34013185,
    //     },
    //     UserInfo:{
    //         head:'',//用户头像
    //         uid:0,
    //         account:'tt10000123',
    //         nickName:'zhangyuge',
    //         //公会体系用户数据
    //         guild_system:{
    //             contribution: 1000, //历史贡献值
    //             consume: 100, //可消费贡献值
    //             diamond: 1000, //红钻
    //             guild_id:0,//公会id
    //             guild_title: '公会之花',//会员称号
    //             member_level: 0, //公会会员贡献等级
    //             guild_level:0,//公会等级
    //             guild_identity: '会长',//职位
    //             guild_consume:0,//公会可用贡献
    //         }
    //     },
    // }

    var shareData = {};
    var data;
    var dataStr;
    //当前项目数据
    var currentData;
    //获取当前项目地址
    var currentUrl = _getProjectUrl();


    //如果在app内
    if (myWebview.isInAppFunc()){

        //尝试获取参数
        try{
            data = TTJSBridge.invoke("shareData", "getShareData");
            dataStr = typeof data === 'string' ? data : JSON.stringify(data);
            shareData  =  JSON.parse(_expString(dataStr)); //转义字符转换

            //判断是否存在当前项目数据
            var currentShareData = _.find(shareData.data, function(item){
                return currentUrl == item.uri
            });

            //若果当前项目不存在共享数据,则采用url参数
            if(currentShareData) {
                currentData = {
                    data: currentShareData,
                    DeviceInfo : shareData.DeviceInfo,
                    UserInfo : shareData.UserInfo
                }
            }else {
                currentData = false
            }

        }catch(e){
            currentData = false
        }

    }
    else {
        currentData = false
    }


    return currentData;
}


//获取当前项目的参数: return Object (通过共享内存或URL传递的参数)
myApp.getProjectParam = function(){

    //当前项目参数
    var currentParam;
    //获取共享数据
    var shareData = myApp.getProjectShareData();

    //如果当前项目存在共享数据,则返回共享参数,否则返回url参数
    if(shareData){
        if(shareData.data.hasOwnProperty('param')){
            currentParam = shareData.data.param; //新的数据结构
            currentParam.uid = shareData.UserInfo.uid; //加入uid
            currentParam = _.extend(currentParam, shareData.DeviceInfo); //加入设备信息
        }else {
            currentParam = shareData.data //原有数据结构
            currentParam.uid = shareData.UserInfo.uid; //加入uid
            currentParam = _.omit(currentParam, 'uri'); //忽略uri参数
            currentParam = _.omit(currentParam, 'guildStarIcons'); //兼容处理: 忽略公会体系参数
            currentParam = _.extend(currentParam, shareData.DeviceInfo); //加入设备信息
        }

    }else {
        currentParam = _getCurrentUrlParam();
    }

    return currentParam;
}


//请求TT的JSON数据
//参数: url: 例如'/act/goddess/post',地址如http://api.52tt.com会自动补齐
//其他参数:
// parameter: Object 请求参数, success: Function, Indicator: 菊花类型 (true表示不显示菊花, 'bottom'表示使用底部菊花), failure: Function
myApp.requestApi = function (url, parameter, success, Indicator, failure){
    if(parameter == null){
        parameter = {};
    }

    parameter.callback = 1;
    parameter.debug = 0;

    var inApp = myWebview.isInAppFunc();
    if(inApp){
        parameter.token = myWebview.getAppData("getToken");
    }

    //获取项目参数用于透传
    var extendParameter = myApp.getProjectParam();
    parameter = _.extend(parameter, extendParameter);


    //接口匹配环境
    url = _urlMatching(url);

    //执行JSONP请求
    function runAjaxRequest(){

        //菊花类型
        myApp.showLoadingIndicator(Indicator);

        $$.ajax({
            method: "get",
            async: true,
            url: url,
            crossDomain: true,
            dataType: 'json',
            timeout: 30 * 1000,
            data: parameter,
            success: function (data) {
                myApp.hideLoadingIndicator(Indicator);

                if (data.code === 0) {
                    if(success) success(data);
                }else{

                    myApp.addSnackbar({
                        message: data.msg + " (" + data.code + ")",
                        hold: 5000
                    });

                    if(failure) failure(data)

                }
            },
            error: function () {

                myApp.hideLoadingIndicator(Indicator);

                if(Indicator != true){
                    myApp.networkErrorProcess();
                }
                console.log('error-page');

            }
        });
    }

    //轮询优先级标志位, 是否可以执行
    function prepareRunAjax(){
        if(!myApp.isTransitionOn){
            runAjaxRequest();
        }else {
            _.delay(prepareRunAjax,50);
        }
    }

    prepareRunAjax();

}


//POST JSON数据
//参数: url: 例如'/act/goddess/post',地址如http://api.52tt.com会自动补齐
// parameter: Object 请求参数, success: Function, Indicator: 菊花类型 (true表示不显示菊花, 'bottom'表示使用底部菊花), failure: Function
myApp.requestPostApi = function (url, parameter, success, failure, Indicator){

    if(parameter == null){
        parameter = {};
    }

    var inApp = myWebview.isInAppFunc();
    if(inApp){
        parameter.token = myWebview.getAppData("getToken");
    }

    //获取项目参数用于透传
    var extendParameter = myApp.getProjectParam();
    parameter = _.extend(parameter, extendParameter);

    //接口匹配环境
    url = _urlMatching(url);

    //菊花类型
    myApp.showLoadingIndicator(Indicator);

    $$.ajax({
        method: "post",
        async: true,
        url: url,
        crossDomain: true,
        dataType: 'json',
        timeout: 30 * 1000,
        data: JSON.stringify(parameter),
        success: function (data) {
            myApp.hideLoadingIndicator(Indicator);

            if (data.code === 0) {
                if(success) success(data);
            }else{
                //菊花是否静默
                if(Indicator != true){
                    myApp.addSnackbar({
                        message: data.msg + " (" + data.code + ")",
                        hold: 5000
                    });
                }

                if(failure) failure(data)

            }
        },
        error: function () {
            myApp.hideLoadingIndicator(Indicator);

            if(Indicator != true){
                myApp.networkErrorProcess();
            }
            console.log('error-page');

        }
    });
}


//错误处理
myApp.networkErrorProcess = function(){
    console.log('网络异常，请求失败');
    //myApp.redictNewPage('network-error', true, false);
    //myWebview.showToast('网络异常，请检查你的网络连接后重试');
    myApp.addSnackbar({
        message: '网络异常，请检查你的网络连接后重试',
        hold: 5000
    })
}

//菊花类型显示
myApp.showLoadingIndicator = function(type) {
    if(type != true){
        if(type == 'bottom'){
            myApp.showBottomIndicator();
        }
        else{
            myApp.showIndicator();
        }
    }
}

//菊花关闭
myApp.hideLoadingIndicator = function(type) {
    if(type != true){
        if(type == 'bottom'){
            myApp.hideBottomIndicator();
        }
        else{
            setTimeout(function(){
                myApp.hideIndicator();
            }, 300);
        }
    }

    setTimeout(function(){
        myApp.pullToRefreshDone();
    }, 500);
}
